![](dotnetdiagramimages/C1_LiveLinq_4_5_2_C1_LiveLinq_Collections_IndexedCollection`1.png)
'Declaration
Public Class IndexedCollection(Of T) Inherits System.Collections.ObjectModel.Collection(Of T) Implements C1.LiveLinq.Indexing.IIndexedSource(Of T), C1.LiveLinq.IObservableSource(Of T)
public class IndexedCollection<T> : System.Collections.ObjectModel.Collection<T>, C1.LiveLinq.Indexing.IIndexedSource<T>, C1.LiveLinq.IObservableSource<T>
If you don't have preexisting collection classes and need to create your own, the best choice is to use the built-in LiveLinq collection class IndexedCollection<T>. It is specifically optimized for LiveLinq use.
Usually, the element class T must implement the property change notification interface System.ComponentModel.INotifyPropertyChanged. The easiest way to implement System.ComponentModel.INotifyPropertyChanged is to derive the element class from IndexableObject.
In rare cases where implementing System.ComponentModel.INotifyPropertyChanged is impossible, a custom C1.LiveLinq.Listeners.PropertyChangeListener<T> can be provided instead.
For details, see Using the built-in collection class IndexedCollection(T) (LiveLinq to Objects).
For alternative options in LiveLinq to Objects, see LiveLinq to Objects: IndexedCollection(T) and other collection classes
The IndexedCollection<T> class is not needed in LiveLinq to DataSet and LiveLinq to XML, because in those cases LiveLinq works with collections that already exist in ADO.NET and XML.
System.Object
System.Collections.ObjectModel.Collection<T>
C1.LiveLinq.Collections.IndexedCollection<T>